package com.kamistoat.meimeistore.apisystem.feign;

import com.kamistoat.meimeistore.apisystem.factory.RemoteFileFallbackFactory;
import com.kamistoat.meimeistore.apisystem.domain.SysFile;
import com.kamistoat.meimeistore.commoncore.constant.ServiceNameConstants;
import com.kamistoat.meimeistore.commoncore.domain.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

/**
 * 文件服务feign接口。
 * <p>
 * value用于表明在注册中心中该Feign所属的模块名称，这里也就是属于 meimeistore-manage-backstage-file 模块。
 * contextId的作用是如果我想把相同 value的 FeignClient拆成好几个写，就用 contextId进行区分，不然会报Bean重复的错误
 */
@FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class)
public interface RemoteFileService {

    /**
     * 上传文件
     *
     * @param file 以 MultipartFile 格式上传文件
     * @return 结果
     */
    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file);
}
